package LeetCode.题库.简单;

import java.util.Arrays;

/**
 * @author 挚爱之夕
 * @version 1.0
 * @implSpec 给你一个 升序排列 的数组 nums ，请你 原地 删除重复出现的元素，使每个元素 只出现一次 ，
 * 返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。
 * @since 2022 - 10 - 23 - 12:32
 */
public class _26删除有序数组的重复项 {
    public static void main(String[] args) {
        int[] nums = {1, 1, 2, 3};
        int n = new Solution26().removeDuplicates1(nums);
        System.out.println(n);
        for(int i = 0; i < n; i++){
            System.out.print(nums[i] + " ");
        }
    }

}
class Solution26{
    //by me : 每发现重复的就移一次
    public int removeDuplicates(int[] nums) {
        int n = nums.length;
        for(int i = 0; i < n; i++){
            int j = i + 1, cnt = 0;
            while(j < n && nums[j] == nums[i]){
                cnt++;
                j++;
            }
            n -= cnt;
            if(cnt > 0){
                for(int k = i + 1; k < n; k++){
                    nums[k] = nums[j++];
                }
            }
        }
        return n;
    }
    //双指针
    public int removeDuplicates1(int[] nums) {
        if(nums == null || nums.length == 0) return 0;
        int left = 0;
        int right = 0;
        while(right < nums.length){
            if(nums[left] != nums[right]){
                if(right  > left + 1){
                    nums[left + 1] = nums[right];
                }
                left++;
            }
            right++;
        }
        return left + 1;
    }
}
